package cn.edu.ncu.housinghub.entity.user;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Pattern;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 基础用户信息表（MyBatis映射）
 */
@Data
@NoArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true)
public class User {
    @NotNull(message = "用户ID不能为空")
    private Long id;

    @NotBlank(message = "用户名不能为空")
    private String username; // 用户名（登录用）

    @NotBlank(message = "密码不能为空")
    //  校验确认密码与密码是否一致
    @Pattern(regexp = "^(?=.*[a-zA-Z])(?=.*\\d)(?=.*[!@#$%^&*()_+\\-=\\[\\]{};':\"\\\\|,.<>\\/?]).{8,}$",
            message = "密码必须包含字母、数字和特殊字符，且长度至少为8位，不能包含空格")
    private String password; // 加密密码（BCrypt）

    @Email(message = "邮箱格式不正确")
    @NotBlank(message = "邮箱不能为空")
    @Pattern(regexp = "^[a-zA-Z0-9_-]+@qq.com$", message = "邮箱格式错误") // 校验是否为qq邮箱的格式
    private String email; // QQ邮箱（注册和登录方式）
    private String phone; // 手机号
    private String gender; // 性别
    private String birthday; // 生日
    private String city; // 所在城市
    private String bio; // 个人简介
    private String avatar; // 头像URL

    @NotNull(message = "角色不能为空")
    private Integer role; // 角色（1(001)=租客，2(010)=房东，4(100)=中介）

    private Boolean isDeleted = false; // 软删除（0=未删除，1=已删除）
//    @JsonIgnore
    private LocalDateTime createTime; // 创建时间
    // 身份状态默认为false

    private Boolean isIdentityVerified =  false; // 身份认证状态（0=未认证，1=已认证）

    private List<BankCard> bankCard;  // 银行卡

    public User(Long tenantId) {
       this.id = tenantId;
    }
}
